#include <bits/stdc++.h>
using namespace std;
struct Rec {
  int a;
  int b;
};
Rec c[200005];
// 自定义排序，长度短的排在前面，若长度相同，宽度短的排在前面
bool cmp(Rec x, Rec y) {
  if (x.a == y.a)
    return x.b < y.b;
  return x.a < y.a;
}
int dd[200005]; // 单调队列
int len = 0;
int n;
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    scanf("%d %d", &c[i].a, &c[i].b);
  }
  sort(c + 1, c + 1 + n, cmp); // 排序

  for (int i = 1; i <= n; i++) { // 单调队列优化
    if (c[i].b >= dd[len]) { // 如果比最大的大（或相等），则加入
      len++;
      dd[len] = c[i].b;
    } else { // 否则，替换掉大于他的最小的那个
      int *x = upper_bound(dd + 1, dd + 1 + len, c[i].b);
      *x = c[i].b;
    }
  }
  printf("%d", len);
  return 0;
}